package com.cskaoyan.javase.oop1._14block._2building._0introduction;

/**
 * 构造代码块的引入
 * 什么是构造代码块 ？
 * 定义在类的成员位置，使用以下声明方式声明的代码块，称之为构造代码块。
 * //成员位置
 * {
 *   // 局部位置
 * }
 * //成员位置
 * 注意事项： 构造代码块的大括号内部属于局部位置，在里面定义的变量是局部变量。
 *
 * 构造代码块的作用：
 * 正如它的名字一样,它随着构造器的执行而执行,所以构造代码块也是在创建对象过程中,用于给对象的成员变量赋值的.
 *
 * 于是总结到目前为止,在创建对象过程中,成员变量的赋值手段:
 *      1.默认初始化,具有默认值
 *      2.构造器赋值
 *      3.显式赋值
 *      4.构造代码块赋值
 * "掐头去尾" 默认值和构造器赋值,最先和最后执行
 * 而显式赋值和构造代码块赋值
 * 按照代码的书写顺序从上到下执行
 *
 *
 * @since 14:54
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        System.out.println(new Student().age);
        System.out.println(new Student(38).age);
    }
}

class Student {
    // 构造代码块
    {
        // 在构造代码块中给age成员变量赋值
        age = 28;
    }

    int age = 18;


    public Student() {
    }

    public Student(int age) {
        this.age = age;
    }
}
